#include "head.h"

// 实现文件上传功能
int putsFunc(int sockfd, const char *filename) {
    // 先接收报错
    int ifError;
    recvn(sockfd, &ifError, sizeof(int));
    if (ifError != 0) {
        // 接收一个小火车
        print_network_message(sockfd);
        return -1;
    }

    printf("upload begin\n");
    train_t train_file;
    bzero(&train_file, sizeof(train_file));

    // 打印上传开始信息
    int fd = open(filename, O_RDWR);// 只读的方式打开文件
    struct stat statbuf;
    fstat(fd, &statbuf); // 使用 fstat 获取文件的状态信息
    
    // 循环读取并发送文件内容
    while(1){
        bzero(&train_file, sizeof(train_file)); 
        // 使用read函数从磁盘中读取文件数据
        ssize_t sret=read(fd,train_file.data,sizeof(train_file.data));
        if(sret==0){ // 此时表示文件已经读取完毕
            printf("upload over\n");
            break;
        }
        // 将读取完的文件数据发送给客户端
        // MSG_NOSIGNAL 标志用于防止发送过程中产生信息
        train_file.length = sret;
        sret = send(sockfd,&train_file,sizeof(train_file.length)+train_file.length,MSG_NOSIGNAL);
    }

    // 发送结束标志，
    train_file.length=0;
    send(sockfd,&train_file,sizeof(train_file.length),MSG_NOSIGNAL);
    // 报错信息呢
    //
    //
    //
    //
    // 写前面
    close(fd);
    return 0;
}
